package com.lbj.core.adapter

import androidx.recyclerview.widget.DiffUtil
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder

/**
 * 作者：李炳军
 * 创建日期：2021-03-30  13:41
 * 释义：
 */
abstract class CoreAdapter<T>(layoutResId: Int) : BaseQuickAdapter<T, BaseViewHolder>(layoutResId) {

    init {
        setDiffCallback(object : DiffUtil.ItemCallback<T>() {
            override fun areItemsTheSame(oldItem: T, newItem: T): Boolean {
                return isItemSame(oldItem, newItem)
            }

            override fun areContentsTheSame(oldItem: T, newItem: T): Boolean {
                return isContentsSame(oldItem, newItem)
            }

            override fun getChangePayload(oldItem: T, newItem: T): Any? {
                return changePayload(oldItem, newItem)
            }
        })
    }

    abstract fun isItemSame(old: T, new: T): Boolean
    abstract fun isContentsSame(old: T, new: T): Boolean
    open fun changePayload(old: T, new: T): Any? = null

    /**
     * 新增数据时使用
     */
    fun addDiffData(list: List<T>) {
        addData(list)
        setDiffNewData(data)
    }

    /**
     * 设置新的数据，修改数据时使用
     */
    fun setDiffData(list: MutableList<T>) {
        setDiffNewData(list)
    }
}